<?php
class ImageUploadComponent extends Component {

  private $image;
  private $image_type;
  private $imageTypes = array('image/gif'=>IMAGETYPE_GIF, 'image/jpeg'=>IMAGETYPE_JPEG, 'image/png'=>IMAGETYPE_PNG);

  function load($filename) {
    $image_info = getimagesize($filename);
    $this->image_type = $image_info[2];
    if ($this->image_type == IMAGETYPE_JPEG) {
      $this->image = imagecreatefromjpeg($filename);
    } elseif ($this->image_type == IMAGETYPE_GIF) {
      $this->image = imagecreatefromgif($filename);
    } elseif ($this->image_type == IMAGETYPE_PNG) {
      $this->image = imagecreatefrompng($filename);
    }
  }

  function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
    $retVal = false;
    if ($image_type == IMAGETYPE_JPEG) {
      $retVal = imagejpeg($this->image, $filename, $compression);
    } elseif ($image_type == IMAGETYPE_GIF) {
      $retVal = imagegif($this->image, $filename);
    } elseif ($image_type == IMAGETYPE_PNG) {
      $retVal = imagepng($this->image, $filename);
    }
    if ($permissions != null) {
      chmod($filename, $permissions);
    }
    return $retVal;
  }

  function output($image_type=IMAGETYPE_JPEG) {

    if ($image_type == IMAGETYPE_JPEG) {
      imagejpeg($this->image);
    } elseif ($image_type == IMAGETYPE_GIF) {
      imagegif($this->image);
    } elseif ($image_type == IMAGETYPE_PNG) {
      imagepng($this->image);
    }
  }

  function getWidth() {
    return imagesx($this->image);
  }

  function getHeight() {
    return imagesy($this->image);
  }

  function resizeToHeight($height) {
    $ratio = $height / $this->getHeight();
    $width = $this->getWidth() * $ratio;
    $this->resize($width, $height);
  }

  function resizeToWidth($width) {
    $ratio = $width / $this->getWidth();
    $height = $this->getheight() * $ratio;
    $this->resize($width, $height);
  }

  function scale($scale) {
    $width = $this->getWidth() * $scale / 100;
    $height = $this->getheight() * $scale / 100;
    $this->resize($width, $height);
  }

  function resize($width, $height) {
    $new_image = imagecreatetruecolor($width, $height);
    imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
    $this->image = $new_image;
  }

  public function getImageTypes() {
    return $this->imageTypes;
  }

  public function setImageTypes($imageTypes) {
    $this->imageTypes = $imageTypes;
  }


}

?>